
 1000  *SAVE BUTTERILLS.DIV
 1010  *--------------------------------
 1020  * 16 BIT DIVIDE WITH REMAINDER
 1030  * DIVIDE B BY A
 1040  * LEAVES QUOTIENT IN B,
 1050  *        REMAINDER IN A
 1060  *--------------------------------
 1070  *   TIMING:  A=$0000 -- 39 cycles
 1080  *            B>$7FFF -- 71 or 74 cycles
 1090  *            A=B     -- 82 cycles
 1100  *        A=1,B=$FFFF -- 676 cycles
 1110  *--------------------------------
 1120  A      .EQ 0,1      DIVISOR, REMAINDER
 1130  B      .EQ 2,3      DIVIDEND, QUOTIENT
 1140  *--------------------------------
 1150         .OP 65802
 1160  DIV16
 1170         CLC          ENTER FROM 6502
 1180         XCE          NATIVE MODE
 1190         REP #$20     A-REG 16 BITS
 1200         LDX #0       START SCALE CNTR
 1210         LDA A        GET DIVISOR
 1220         BEQ .90      ...ZERO DIVISOR
 1230         BMI .30      ...DIVISOR > $7FFF
 1240  *---SCALE DIVISOR----------------
 1250  .10    CMP B        ALIGN A TO LEFT
 1260         BCS .20      UNTIL > B
 1270         INX             OR BIT 15 SET
 1280         ASL          & COUNT IN X
 1290         BPL .10
 1300  .20    STA A        SCALED DIVIDEND
 1310  *---START SUBTRACTING------------
 1320  .30    LDA B        GET DIVIDEND
 1330         STZ B        CLEAR QUOTIENT
 1340  .40    CMP A        REPEATED CONDITIONAL
 1350         BCC .50       SUBTRACTION.
 1360         SBC A
 1370  .50    ROL B        ROL IN 1 IF SUBT.
 1380         LSR A               0 IF NO SUBT.
 1390         DEX
 1400         BPL .40
 1410         STA A        REMAINDER
 1420  *---RETURN TO CALLER-------------
 1430  .60    SEC          EXIT TO 6502
 1440         XCE
 1450         RTS
 1460  *---FOR X/0, GIVE 0,0 ANSWER-----
 1470  .90    STA B        DIVISION BY ZERO
 1480         BRA .60
 1490  *--------------------------------

